package club.service.impl;

import club.dao.ApplyMapper;
import club.pojo.Apply;
import club.service.ApplyService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
@Transactional
public class ApplyServiceImpl implements ApplyService {

    @Resource
    private ApplyMapper applyMapper;

    /**
     * 查询所有申请信息（分页）
     * @param state 状态筛选条件，可以为null，表示不按状态筛选
     * @param pageNum 当前页码
     * @param pageSize 每页显示条数
     * @return 分页后的申请信息列表
     */
    @Override
    public PageInfo<Apply> allApply(Integer state, Integer pageNum, Integer pageSize) {
        // 使用PageHelper进行分页设置
        PageHelper.startPage(pageNum, pageSize);
        // 构建查询条件
        EntityWrapper wrapper = new EntityWrapper();
        if (state != null && state != 0) {
            wrapper.eq("state", state);
        }
        // 查询符合条件的申请列表
        List list = applyMapper.selectList(wrapper);
        // 封装为分页对象
        PageInfo<Apply> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 根据申请ID查询申请信息
     * @param id 申请ID
     * @return 对应ID的申请信息，若不存在则返回null
     */
    @Override
    public Apply findByid(Integer id) {
        // 根据ID查询申请信息
        return applyMapper.selectById(id);
    }

    /**
     * 更新申请信息
     * @param apply 待更新的申请对象
     * @return 更新操作影响的行数，通常为1
     */
    @Override
    public int updateApply(Apply apply) {
        // 执行更新操作
        return applyMapper.updateById(apply);
    }

    /**
     * 删除申请信息
     * @param id 待删除申请的ID
     * @return 删除操作影响的行数，通常为1
     */
    @Override
    public int del(Integer id) {
        // 执行删除操作
        return applyMapper.deleteById(id);
    }

    /**
     * 创建新的申请
     * @param apply 待创建的申请对象
     * @return 插入操作影响的行数，通常为1
     */
    @Override
    public Integer create(Apply apply) {
        // 执行插入操作
        return applyMapper.insert(apply);
    }
}